home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 9 / FM Towns Free Software Collection 9.iso / t_os / tool / sdksaver / src / sdksaver.c < prev    next >
C/C++ Source or Header  |  1994-11-16  |  4KB  |  166 lines

  1. /************************************************
  2. *  TOWNS-OSV2.1画面圧縮保存サイドワーク SDKSAVER.EXP *
  3. *  [SDKSAVER.C]            (C) 頭脳圧搾工場仙台 *
  4. *                        Version 0.1 1994/04/03 *
  5. *                        Version 1.0 1994/08/18 *
  6. *************************************************
  7.  
  8.     ■ 機能 ■
  9.  
  10.         全標準画面モード対応画面保存サイドワーク
  11.  
  12.     ■ [使用法・登録例] ■
  13.  
  14.     システム設定のサイドワークアプリ設定でSDKSAVER.EXPを設定する。
  15.  
  16.     オプションは [-v] [path]        ([...]は省略可能)
  17.  
  18.         -v...仮想画面をまるごと保存するオプション
  19.  
  20.         path...ファイルパスとファイル名先頭
  21.  
  22.         [例] a:\graphics\image
  23.         作成ファイル
  24.         Aドライブのgraphicsディレクトリに
  25.         image0.tif
  26.         image1.tif
  27.         image2.tif
  28.         ...
  29.         image999.tif
  30.  
  31.     あるいは\SIDEWORK\SIDEWORK.SYSに次の一行を追加
  32.  
  33.     S "スクリーンセーバー?"      @:\SIDEWORK\SDKSAVER.EXP [-v] [path]
  34.  
  35.  
  36.     ■ 構成する関数 ■
  37.  
  38.         init            : サイドワーク, T-BIOSの初期設定
  39.         term            : サイドワーク, T-BIOSの終了処理
  40.         make_filename    : 保存用ファイル名の取得
  41. */
  42. #include    <stdio.h>
  43. #include    <stdlib.h>
  44. #include    <egb.h>
  45. #include    <string.h>
  46. #include    <sidework.h>
  47. extern int saveTiff(char *gwork, char *palt, int page, char *fileName, int vsflg);
  48.  
  49. /*******************
  50. *  T-BIOS作業領域  *
  51. *******************/
  52. static    char    *gwk ;                    /*  グラフィックス作業領域      */
  53. #define PaletteWorkSize (4+8*256)        /*  パレット情報退避領域サイズ  */
  54. static    char    *pwk ;                    /*  パレット情報退避領域        */
  55. static    int        orgWritePage ;            /*  元の書き込みページ          */
  56. static    int        sidework ;
  57. static    int        spage ;
  58.  
  59. /*********************************
  60. *  init ---- 表示系の初期化処理  *
  61. *********************************/
  62.  
  63. void init(void)
  64. {
  65.     int page[2] ;        /*  画面モード    */
  66.     spage = 1 ;
  67.     if ((gwk = malloc(EgbWorkSize + PaletteWorkSize)) != NULL) {
  68.         pwk = gwk + EgbWorkSize ;
  69.         EGB_getResolution(&page[0], &page[1]) ;
  70.         EGB_resolution(gwk, 1, page[1] | 0x40) ;/* ページ#1の画面モード */
  71.         EGB_resolution(gwk, 0, page[0] | 0x40) ;/* ページ#0の画面モード */
  72.             /* 現在の書き込みページを退避 */
  73.         orgWritePage = EGB_getWritePage(0, 0) ;
  74.         if (page[0] < 12 || page[0] > 22) spage =2 ;
  75.     }
  76. }
  77.  
  78. /*******************************
  79. *  term ---- 表示系の終了処理  *
  80. *******************************/
  81. int term(void)
  82. {
  83.     /*  元の書き込みページを復元          */
  84.     EGB_writePage(gwk, orgWritePage) ;
  85.  
  86.     /*  サイドワークプロセス終了処理      */
  87.     if (sidework != 0) sdk_terminate(gwk, NULL, NULL) ;
  88.  
  89.     return 0 ;
  90. }
  91.  
  92. /********************************************
  93. *  make_fileName ---- 保存ファイル名の作成  *
  94. ********************************************/
  95. int fileExists(char *fileName){
  96.     FILE *fp ;
  97.     fp = fopen(fileName, "rb") ;
  98.     if (fp == NULL) return 0 ;
  99.     fclose(fp) ;
  100.     return 1 ;
  101. }
  102. int make_fileName(char *fileName,char *para){
  103.     int size,i,max ;
  104.     char *p ;
  105.     char num[9] ;
  106.     p = para ;
  107.     size = 0 ;
  108.     while (*p != '\0') p++ ;
  109.     p-- ;
  110.     while (*p != '\\' & *p != ':'){
  111.         p-- ;
  112.         size++ ;
  113.     }
  114.     size = 8 - size ; 
  115.     for(max=1;size>0;size--) max *= 10 ;
  116.     if (max > 0){
  117.         for(i=0;i<max;i++){
  118.             strcpy(fileName, para) ;
  119.             strcat(fileName, _itoa(i, num, 10)) ;
  120.             strcat(fileName, ".tif") ;
  121.             if (fileExists(fileName) == 0) break ;
  122.         }
  123.     }else{
  124.         strcpy(fileName, para) ;
  125.         strcat(fileName, ".tif") ;
  126.     }
  127.     return 0 ;
  128. }
  129. /**************************
  130. *  main ---- mainprogram  *
  131. **************************/
  132. void main(int argc, char *argv[])
  133. {
  134.     char    *filePath,*initpara ;
  135.     int argx ;
  136.     int vsflg = 0 ;
  137.  
  138.     sidework = sdk_isAtWork() ;
  139.     if (sidework != 0 && sdk_start(32) != 0) return ;
  140.  
  141.     filePath = malloc(256) ;
  142.     initpara = filePath + 128 ;
  143.  
  144.     argx = argc ;
  145.     if (argx > 1 && argv[1][0] == '-' && (argv[1][1] == 'v' || argv[1][1] == 'V')) {
  146.     argx -= 1 ;
  147.     vsflg = 1 ;
  148.     }
  149.     if (argx != 2)
  150.         strcpy(initpara, "a:\\image") ;    /*  デフォルト  */
  151.     else
  152.         strcpy(initpara, argv[argc-1]) ;
  153.  
  154.     init() ;            /*  グラフィックスの初期化  */
  155.  
  156.     make_fileName(filePath, initpara) ;
  157.     saveTiff(gwk, pwk, 0, filePath, vsflg) ;
  158.     make_fileName(filePath, initpara) ;
  159.     if (spage==2) saveTiff(gwk, pwk, 1, filePath, vsflg) ;
  160.  
  161.     free(filePath) ;
  162.  
  163.     term() ;                    /*  グラフィックスとサイドワークの終了処理  */
  164.  
  165. }
  166.